#ifndef _BSP_Motor_H
#define _BSP_Motor_H

#include "stm32f4xx.h"

#define Motor_A     1
#define Motor_B     2

/* AIN */
#define RCC_AIN1                RCC_AHB1Periph_GPIOC
#define PORT_AIN1               GPIOC
#define GPIO_AIN1               GPIO_Pin_1
#define RCC_AIN2                RCC_AHB1Periph_GPIOC
#define PORT_AIN2               GPIOC
#define GPIO_AIN2               GPIO_Pin_2
/* BIN */
#define RCC_BIN1                RCC_AHB1Periph_GPIOC
#define PORT_BIN1               GPIOC
#define GPIO_BIN1               GPIO_Pin_0
#define RCC_BIN2                RCC_AHB1Periph_GPIOC
#define PORT_BIN2               GPIOC
#define GPIO_BIN2               GPIO_Pin_3
/* PWMA */
#define RCC_PWMA                RCC_AHB1Periph_GPIOB
#define PORT_PWMA               GPIOB
#define GPIO_PWMA               GPIO_Pin_0
#define GPIO_PWMA_SOURCE        GPIO_PinSource0
#define AF_PWMA                 GPIO_AF_TIM3
/* PWMB */
#define RCC_PWMB                RCC_AHB1Periph_GPIOB
#define PORT_PWMB               GPIOB
#define GPIO_PWMB               GPIO_Pin_1
#define GPIO_PWMB_SOURCE        GPIO_PinSource1
#define AF_PWMB                 GPIO_AF_TIM3
/* TIM */
#define RCC_PWMA_TIMER          RCC_APB1Periph_TIM3
#define BSP_PWMA_TIMER          TIM3
#define RCC_PWMB_TIMER          RCC_APB1Periph_TIM3
#define BSP_PWMB_TIMER          TIM3

/* AIN、BIN输出操作*/
#define AIN1_OUT(X)  GPIO_WriteBit(PORT_AIN1, GPIO_AIN1, X?Bit_SET:Bit_RESET)
#define AIN2_OUT(X)  GPIO_WriteBit(PORT_AIN2, GPIO_AIN2, X?Bit_SET:Bit_RESET)
#define BIN1_OUT(X)  GPIO_WriteBit(PORT_BIN1, GPIO_BIN1, X?Bit_SET:Bit_RESET)
#define BIN2_OUT(X)  GPIO_WriteBit(PORT_BIN2, GPIO_BIN2, X?Bit_SET:Bit_RESET)

/* 初始化函数 */
void TB6612_Init(uint16_t pre, uint16_t per);
void AIN_GPIO_INIT(void);
void BIN_GPIO_INIT(void);

/* 电机控制函数 */
void Motor_Control(uint8_t motor, uint8_t dir, uint32_t speed);

#endif  /* _BSP_Motor_H */

